Add and use gtk_icon_helper_invalidate_for_change
authorTimm Bäder <mail@baedert.org>
Sat, 6 Feb 2016 08:24:36 +0000 (09:24 +0100)
committerTimm Bäder <mail@baedert.org>
Sun, 7 Feb 2016 18:16:26 +0000 (19:16 +0100)
gtk/gtkiconhelper.c
gtk/gtkiconhelperprivate.h
gtk/gtkimage.c

index 0b4b9b797ec266c5dd1f28ef6d9ea4ed93b55f68..ef05f83c2e2c30775f9bd6c09841cb4c3d752bbb 100644 (file)
@@ -63,6 +63,22 @@ gtk_icon_helper_invalidate (GtkIconHelper *self)
     gtk_widget_queue_resize (gtk_css_gadget_get_owner (GTK_CSS_GADGET (self)));
 }
 
+void
+gtk_icon_helper_invalidate_for_change (GtkIconHelper     *self,
+                                       GtkCssStyleChange *change)
+{
+  GtkIconHelperPrivate *priv = self->priv;
+
+  if (change &&
+      ((gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_SYMBOLIC_ICON) &&
+        priv->rendered_surface_is_symbolic) ||
+      (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON) &&
+       !priv->rendered_surface_is_symbolic)))
+    {
+      gtk_icon_helper_invalidate (self);
+    }
+}
+
 static void
 gtk_icon_helper_take_definition (GtkIconHelper      *self,
                                  GtkImageDefinition *def)
@@ -147,8 +163,7 @@ static void
 gtk_icon_helper_style_changed (GtkCssGadget      *gadget,
                                GtkCssStyleChange *change)
 {
-  if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON))
-    gtk_icon_helper_invalidate (GTK_ICON_HELPER (gadget));
+  gtk_icon_helper_invalidate_for_change (GTK_ICON_HELPER (gadget), change);
 
   if (!GTK_IS_CSS_TRANSIENT_NODE (gtk_css_gadget_get_node (gadget)))
     GTK_CSS_GADGET_CLASS (gtk_icon_helper_parent_class)->style_changed (gadget, change);
index f4bdcd4817035b055174f5d93f433115846bf68a..185c2715de927f19ac2e9fa765ba1d6adf93dc0c 100644 (file)
@@ -140,6 +140,9 @@ void     _gtk_icon_helper_set_force_scale_pixbuf (GtkIconHelper *self,
 
 void      gtk_icon_helper_invalidate (GtkIconHelper *self);
 
+void      gtk_icon_helper_invalidate_for_change (GtkIconHelper     *self,
+                                                 GtkCssStyleChange *change);
+
 G_END_DECLS
 
 #endif /* __GTK_ICON_HELPER_H__ */
index 32d43bdb5cc624f04777390e4dd0b846c69fab60..4b1d158703d7facb21b1f3664d5117b62ed5bfa6 100644 (file)
@@ -1930,8 +1930,7 @@ gtk_image_style_updated (GtkWidget *widget)
     {
       GtkCssStyleChange *change = gtk_style_context_get_change (context);
 
-      if (change && gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON))
-        gtk_icon_helper_invalidate (priv->icon_helper);
+      gtk_icon_helper_invalidate_for_change (priv->icon_helper, change);
     }
 
   GTK_WIDGET_CLASS (gtk_image_parent_class)->style_updated (widget);